import { createStore } from 'vuex'
// import ModuleUser from "@/store/modules/user";
// 类似 Redux 中的建立状态树

export default createStore({

  // 1、 存储所有全局数据
  state: {
    id: "",
    loginName: "",
    token:"",
    dict:[],
    canExport:false,
    canDelete: false
  },

  // 2、 需要通过计算获取state里的内容获取的数据
  // 只能读取不可修改
  getters: {
    dict:(state) =>state.dict,
    loginName:(state) =>state.loginName,
    canExport:(state) =>state.canExport,
    canDelete:(state) =>state.canDelete,
  },

  //  3、定义对state的各种操作
  // why不直接实现在mutation里需要写到action里?
  // mtations不能执行异步操作。aq:从云端获取信息-->(等待云端反馈)更新到state异步操作
  // 因此说:对于异步操作需要放到action里，简单的直接赋值操作可以直接放到mutation里
  mutations: {
    updateUser(state,data){
      // eslint-disable-next-line no-debugger
      state.token = data.token;
      state.loginName = data.loginName;
    },
    updateDict(state,obj){
      // eslint-disable-next-line no-debugger
      state.dict[obj.k] = obj.val;
    },
    updateDictAll(state,all){
      // eslint-disable-next-line no-debugger
      state.dict = all;
      //('sys_yes_no');// 是否
      //('nutrition_type'); // 营养方式
      //('en_type');// 品类
      //('user_sex'); // 性别
      //('complication');// 主要合并症
      //('main_diagnosis');// 主诊断
      //('complication_level');// 并发症分级
      //('postoperative_complications');// 术后并发症
    },
    updatePermissions(state,data){
      // eslint-disable-next-line no-debugger
      state.canExport = data.canExport;
      state.canDelete = data.canDelete;
    }
  },

  // 3、定义对state的各种操作
  // actions无法直接修改state，需要在mutations里更新
  // mutation不支持异步，所以需要在action里写api到url
  actions: {
    // 比说action定义了更新state的操作
    // 但是不可对其直接修改
    // 所有的修改操作必须放到mutations里
    login:(context,data) =>{
      context.commit("updateUser",data)
    },
    dict:(context,obj) =>{
      context.commit("updateDict",obj)
    },
    dictAll:(context,data) =>{
      context.commit("updateDictAll",data)
    },
    permissions:(context,data) =>{
      context.commit("updatePermissions",data)
    },
  },
})

